package com.rui.factory.abstract_.main;

import com.rui.factory.abstract_.model.AmericanFactory;
import com.rui.factory.abstract_.model.ItalyFactory;

/**
 * 抽象工厂模式
 * <p>
 * 适用场景：
 * 客户端（应用层）不依赖于产品类实例如何被创建和实现等细节。
 * 强调一系列相关的产品对象（属于同一产品族）一起使用创建对象需要大量重复的代码。
 * 提供一个产品类的库，所有的产品以同样的接口出现，从而使客户端不依赖于具体实现。
 * <p>
 * 优点：
 * 当一个产品族中的多个对象被设计成一起工作时，它能保证客户端始终只使用同一个产品族中的对象。
 * <p>
 * 缺点：
 * 当产品族中需要增加一个新的产品时，所有的工厂类都需要进行修改。
 *
 * @author ZhangRui
 * @date 2023/03/02 13:57
 **/
public class AbstractFactoryMain {

    public static void main(String[] args) {

        new AmericanFactory().createCoffee().taste();
        new AmericanFactory().createDessert().sculpt();

        new ItalyFactory().createCoffee().taste();
        new ItalyFactory().createDessert().sculpt();
    }
}
